﻿
using System.Net;
using System;
using System.Management;
using System.Runtime.InteropServices;

namespace CpuUsed
{
    using System.Net;
    using System;
    using System.Management;
    using System.Runtime.InteropServices;
    using System.Net.Sockets;

    public class GetIP
    {
        [DllImport("Iphlpapi.dll")]
        private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
        [DllImport("Ws2_32.dll")]
        private static extern Int32 inet_addr(string ip);

        //获取本机的IP

        public string[] getLocalIP()
        {
            string[] strAddr = new string[10];
            try
            {
                string strHostName = Dns.GetHostName(); //得到本机的主机名

                IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
                //Dns.GetHostByName(strHostName); //取得本机IP
                int length = ipEntry.AddressList.Length;
                int j=0;
                for (int i = 0; i < length; i++)
                {
                    if (ipEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork)
                    {
                        strAddr[j] = ipEntry.AddressList[i].ToString();
                        j++;
                    }
                }
               
            }
            catch (Exception err)
            {
                Console.WriteLine("Error:{0}", err.Message);
            }
            return (strAddr);
        }
       
        //获取远程主机IP

        public string[] getRemoteIP(string RemoteHostName)
        {
            IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(RemoteHostName);
            IPAddress[] IpAddr = ipEntry.AddressList;
            string[] strAddr = new string[IpAddr.Length];
            for (int i = 0; i < IpAddr.Length; i++)
            {
                strAddr[i] = IpAddr[i].ToString();
            }
            return (strAddr);
        }
        //获取远程主机MAC

        public string getRemoteMac(string localIP, string remoteIP)
        {
            Int32 ldest = inet_addr(remoteIP); //目的ip 

            Int32 lhost = inet_addr(localIP); //本地ip


            try
            {
                Int64 macinfo = new Int64();
                Int32 len = 6;
                int res = SendARP(ldest, 0, ref macinfo, ref len);
                return Convert.ToString(macinfo, 16);
            }
            catch (Exception err)
            {
                Console.WriteLine("Error:{0}", err.Message);
            }
            return 0.ToString();
        }
    }
}
